package com.fowo.api.syncAmazon.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @fileName: AdColumnsUtil
 * @Description: 代码目的，作用，如何工作
 * @Author: yyf
 * @Date: 2024/4/28 0028 10:45
 */
public class AdColumnsUtil {

    /**
     * 获取对象所有属性名
     * @param clazz 对象类型
     * @return
     * @param <T>
     */
    public static <T> List<String> getColumns(Class<? super T> clazz){
        List<String> columnNames = new ArrayList<>();

        // 获取类及其父类的所有声明的字段
        do {
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                // 添加字段名到列表中
                columnNames.add(field.getName());
            }
            // 如果当前类还有父类，继续获取父类的字段
            clazz =  clazz.getSuperclass();
        } while (clazz != null && clazz != Object.class); // 停止条件：到达Object类

        return columnNames;
    }

    public static List<String> deleteColumns(List<String> sourceList,List<String> columnsToRemove){
        return sourceList.stream()
                .filter(column -> !columnsToRemove.contains(column))
                .collect(Collectors.toList());
    }

    /**
     * 获取对象所属性（指定排查）
     * @param clazz
     * @param columnsToRemove
     * @return
     * @param <T>
     */
    public static <T> List<String> getColumns(Class<? super T> clazz,List<String> columnsToRemove){
        List<String> columns = getColumns(clazz);
        return deleteColumns(columns, columnsToRemove);
    }

    /**
     * 获取对象所属性（指定排查）
     * @param clazz
     * @param columnsToRemove
     * @return
     * @param <T>
     */
    public static <T> List<String> getColumns(Class<? super T> clazz,String[] columnsToRemove){
        List<String> toRemove = Arrays.asList(columnsToRemove);
        return getColumns(clazz, toRemove);
    }
}
